import router from '@/router'
import store from '@/store'

router.beforeEach(async(to, from, next) => {
  const url = to.path
  const token = store.state.user.token
  const whiteList = ['/login', '/404', '/test']
  // 1. 有登录+去登录页=首页
  if (token && url === '/login') {
    next('/')
  }
  // 2. 有登录+不去登录页=放行
  if (token && url !== '/login') {
    if (!store.getters.name) {
      await store.dispatch('user/getUserInfo')

      // 这一刻拿完了用户数据, 又还没有进入页面, 就可以进行权限数据的筛选
      // 由于权限数据需要共用, 所以封装到 vuex 当中
      const res = await store.dispatch('permission/filterRoutes', store.getters.menus)
      // 追加路由访问（菜单还没恢复，另外刷新也会404，）
      router.addRoutes([
        ...res,
        // 这些路由都匹配不上再转向404
        { path: '*', redirect: '/404', hidden: true }
      ])
      // 添加了新路由，记得重新跳转一遍目的地址
      // 以便重新对应的页面组件，避免空白页面
      next(to.path)
      router
    }
    next()
  }
  // 3. 没登录+在白名单=放行
  if (!token && whiteList.indexOf(url) > -1) {
    next()
  }
  // 4. 没登录+不在白名单=登录页
  if (!token && whiteList.indexOf(url) === -1) {
    next('/login')
  }
})
